'use strict'

const fs = require('fs')

let mdbMap = null

/**
 * 如果你需要多个数据库服务，在当前目录下提供dbmap.js配置文件。
 */
try {
  fs.accessSync(__dirname + '/dbmap.js')
  let dbmap = require('./dbmap.js')
  mdbMap = dbmap
} catch (err) {
  mdbMap = null
}

module.exports = {
  //服务端运行端口号
  port: 1235,

  //是否启用多个子进程处理请求。
  cluster: true,
  
  worker: 2,

  //自动根据负载情况创建新的worker的最大限制。
  //其数量不是无限制的，最高不能超过cpu核心数量的2倍。
  //框架内部会进行检测并设定一个合法的值。
  autoWorker: 5,

  //titbit-loader配置选项
  loader: {
    //设置全局的路由前缀
    //prepath: '',

    //如果你不需要默认的model加载，可以设置为false。
    loadModel: true,

    /**
     * 如果你需要多个数据库服务，请配置此选项。具体参考：
     * {@link https://gitee.com/daoio/titbit-loader#mdbmap-%E6%8C%87%E5%AE%9A%E5%A4%9A%E4%B8%AA%E6%A8%A1%E5%9E%8B%E5%85%B3%E7%B3%BB} 
     */
    mdbMap: mdbMap
  },

  //跨域请求的配置
  cors: {
    /**
     * 允许跨域的域名，多个域名使用数组。
     *  '*' 表示任何域名都可以。
     * 数组格式示例：[
     *   'https://a.com',
     *   'https://api.a.com',
     *   'https://www.a.com',
     *   'https://xx.com'
     * ]
     */
    allow: '*',
    //跨域请求允许的消息头，多个消息头使用 , 分隔。
    allowHeaders : 'authorization,content-type,x-refresh-token',

    //OPTIONS请求缓存300秒，此期间浏览器请求会先去读取缓存。
    optionsCache: 300,

    //默认为'*'，可以设置允许的请求方法。
    //requestHeaders : '*'

    //默认为''，表示哪些消息头可以暴露给请求端，多个消息头使用 , 分隔。
    exposeHeaders: 'x-refresh-token',

    //是否允许消息头referer为空或不带有referer消息头请求接口。
    //这种情况发生在直接在浏览器访问接口或使用其他客户端访问接口的情况。
    allowEmptyReferer: true,
  },

  //开启https
  https: false,

  //启用http2协议
  http2: false,

  //启用兼容模式，将会开启http2服务，但是兼容http/1.1协议。
  //若设置此选项为true，必须要设置cert和key。
  httpCompatible: false,

  /**
   * 当前服务提供了测试证书，注意此证书不被浏览器认可，不能作为正式服务的证书使用。
   */
  //https证书文件路径，一般是 .pem 或 .crt 或 .cert文件，也可能是.der .cer等格式。
  cert: __dirname + '/cert/localhost.cert',

  //https私钥文件路径，一般是 .key 或 .pem 文件。
  key:  __dirname + '/cert/localhost_private.key',

  /**
   * 以下三项admin、api、sys针对controller目录下的amdin、api、sys目录分组设计。
   */
  //admin模块使用titbit-token进行会话验证。
  admin: {
    //必须是32个字符
    key: '123456789012345678901234567890ao',
    //10个小时有效，毫秒单位
    expires: 3600_000_0
  },

  api: {
    //可选值是token 或 jwt，token表示使用titbit-token扩展，jwt表示使用titbit-toolkit中的jwt扩展。
    mode: 'jwt',
    key: '1234567890zxsdcf',
    //1小时有效
    expires: 3600000,
    //必须是32个字符
    aesKey: '123456789012345678900123456789ww',
    /*
      只针对jwt模式，如果你在payload数据中设置了aes加密的属性，
      可以设置对应的aesKey加解密的密钥，并设定一个属性值表示哪个属性是用于aes加密。
      jwt验证通过后自动进行aes解密。
      设置为null或空字符串表示没有设置此属性。
    */
    aesAttr: ''
  },

  //sys目录下的接口只需要一个key作为密码验证即可。
  //sys目录下的接口主要作为系统内部的服务调用使用。
  sys: {
    key: 'ok2022'
  }

}